From: Stanislav Kinsburskii Date: Wed, 7 Sep 2022 16:27:33 +0000 (+0100) Subject: xen/evtchn: Add an helper to reserve/allocate a port X-Git-Tag: archive/raspbian/4.17.0-1+rpi1^2~33^2~220 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=4e1eade78ef3f339ed671851abce398e80ba04ca;p=xen.git xen/evtchn: Add an helper to reserve/allocate a port In a follow-up patch we will want to either reserve or allocate a port for various event channel helpers. A new wrapper is introduced to either reserve a given port or allocate a fresh one if zero. Take the opportunity to replace the open-coded version in evtchn_bind_virq(). Signed-off-by: Stanislav Kinsburskii Signed-off-by: Julien Grall Signed-off-by: Rahul Singh Acked-by: Jan Beulich --- diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c index f81c229358..565ab71881 100644 --- a/xen/common/event_channel.c +++ b/xen/common/event_channel.c @@ -305,6 +305,18 @@ void evtchn_free(struct domain *d, struct evtchn *chn) xsm_evtchn_close_post(chn); } +static int evtchn_get_port(struct domain *d, evtchn_port_t port) +{ + int rc; + + if ( port != 0 ) + rc = evtchn_allocate_port(d, port); + else + rc = get_free_port(d); + + return rc ?: port; +} + int evtchn_alloc_unbound(evtchn_alloc_unbound_t *alloc) { struct evtchn *chn; @@ -462,19 +474,10 @@ int evtchn_bind_virq(evtchn_bind_virq_t *bind, evtchn_port_t port) if ( read_atomic(&v->virq_to_evtchn[virq]) ) ERROR_EXIT(-EEXIST); - if ( port != 0 ) - { - if ( (rc = evtchn_allocate_port(d, port)) != 0 ) - ERROR_EXIT(rc); - } - else - { - int alloc_port = get_free_port(d); - - if ( alloc_port < 0 ) - ERROR_EXIT(alloc_port); - port = alloc_port; - } + port = rc = evtchn_get_port(d, port); + if ( rc < 0 ) + ERROR_EXIT(rc); + rc = 0; chn = evtchn_from_port(d, port);